//
//  CSHTTPRequestWork.h
//  文件上传的封装(工具类)基本POST请求
//
//  Created by 姚彦兆 on 15/10/18.
//  Copyright © 2015年 姚彦兆. All rights reserved.
//

#import <Foundation/Foundation.h>

typedef void(^successBlcok)( NSData * _Nonnull  data , NSURLResponse * _Nonnull response);

typedef void(^failedBlock)( NSError * _Nullable error);

typedef void(^uploadMSuccessed)( id _Nonnull returnSeversJSONMessage , NSURLResponse * _Nonnull response);

@interface CSHTTPRequestWork : NSObject

/**
 *  上传多个文件并且附带普通文字参数的方法
 *
 *  @param requestURLString      请求的服务器的URL地址字符串
 *  @param fileMessageDictionary 待上传的文件信息字典,其中Key为服务器存储的文件名称,value为文件路径
 *  @param fileKey               服务器接收文件存储的关键字,由后台设置
 *  @param paramterDictionary    普通参数的信息字典,其中Key为服务器接受参数的关键字,value为参数内容
 *  @param completeQueue         完成后回调Block执行的线程
 *  @param uploadSuccess         上传请求成功后的回调Block
 *  @param uploadFailed          上传请求失败后的回调Block
 */
-(void)uploadMoreFilePOSTRequestWithURLString:(nonnull NSString *)requestURLString
                     andFileMessageDictionary:(nonnull NSDictionary *)fileMessageDictionary
                                   andFileKey:(nonnull NSString *)fileKey
                  andNormalParamterDictionary:(nonnull NSDictionary *)paramterDictionary
                             andCompleteQueue:(nonnull dispatch_queue_t)completeQueue
                              andSuccessBlock:(nonnull uploadMSuccessed)uploadSuccess
                                 andFailBlock:(nonnull failedBlock)uploadFailed;

/**
 *  自定义上传单文件的方法
 *
 *  @param requestURLString 上传文件请求的URL地址
 *  @param filePath         文件的路径(在本地需要上传的文件的路径)
 *  @param fileKey          服务器接受文件存储信息的Key值(存储文件类型 , 文件名称 , 文件大小 , 错误信息等)
 *  @param fileName         上传后保存在服务期端的文件名
 *  @param completeQueue    完成后的回调方法运行的线程
 *  @param successBlock     完成后回调(成功)
 *  @param failedBlock      完成后回调(失败)
 */
-(void)uploadFilePOSTRequestWithURLString:(nonnull NSString *)requestURLString
                            andFilePath:(nonnull NSString*)filePath
                             andFileKey:(nonnull NSString *)fileKey
                            andFileName:(NSString * _Nullable)fileName
                       andCompleteQueue:(nonnull dispatch_queue_t)completeQueue
                        andSuccessBlock:(nonnull successBlcok)successBlock
                           andFailBlock:(nonnull failedBlock)failedBlock;

/**
 *  发送普通POST请求 传递HTML的参数
 *
 *  @param requestURL    请求的URL
 *  @param paramaterDic  传给服务器的参数
 *  @param completeQueue 完成后回调的Block执行的线程
 *  @param successBlock  完成后Block(成功)
 *  @param failedBlock   完成后Block(失败)
 */
-(void)sendPOSTRequestWithURLString:(nonnull NSString *)requestURLString
                       andParamater:(NSDictionary* _Nullable)paramaterDic
                   andCompleteQueue:(nonnull dispatch_queue_t)completeQueue
                    andSuccessBlock:(nonnull successBlcok)successBlock
                       andFailBlock:(nonnull failedBlock)failedBlock;

/**
 *  获得HTTPBody内容(多文件内容&参数)
 *
 *  @param fileMessageDictionary 文件信息字典,其中Key值为文件在服务器中存储的名称,value为文件在本地存储的路径,用来获取文件的二进制数据写入请求体
 *  @param paramaterDictionary   普通参数字典,其中的Key值为服务器接受文件的关键字,由后台管理;value值式是传入的内容
 *  @param fileKey               服务器接受上传文件的关键字,由后台管理
 */
-(nonnull NSData *)getHTTPBodyWithFileMessageDictionary:(nonnull NSDictionary *)fileMessageDictionary
               andNormalParamaterDictionary:(nonnull NSDictionary *)paramaterDictionary
                                 andFilekey:(nonnull NSString *)fileKey;

/**
 *  获得HTTPBody内容(单文件内容)
 *
 *  @param filePath 本地文件的路径,用于获得本地文件的二进制数据
 *  @param fileKey  服务器(后台人员)提供的
 *  @param fileName 上传后的文件存储的名字
 *
 *  @return 返回待上传文件的HTTPBody
 */
-(nonnull NSData *)getHTTPBodyWithFilePath:(nonnull NSString *)filePath
                         andServersFileKey:(nonnull NSString *)fileKey
                andFileNameToSaveOnServers:(NSString * _Nullable )fileName ;

/**
 *  动态获取文件类型
 *
 *  @param filePath 传入本地文件路径
 *
 *  @return 返回文件的信息
 */
-(nonnull NSURLResponse *)getFileTypeWithFilePath:(nonnull NSString *)filePath;



/**
 *  取得单例
 *
 *  @return 返回一个单例对象
 */
+(nonnull instancetype)sharedCSHTTPRequestWork;

@end
